//复习C⽂件IO相关操作
// 认识⽂件相关系统调⽤接⼝
// 认识⽂件描述符,理解重定向
// 对⽐fd和FILE，理解系统调⽤和库函数的关系
// 理解⽂件和内核⽂件缓冲区
// ⾃定义shell新增重定向功能
// 理解Glibc的IO库

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

using namespace std;

int main()
{
    // FILE* fp = fopen("myfile", "w");
    // if(!fp)
    // {
    //     perror("fopen");
    //     return -1;
    // }

    // const char* msg = "hello\n";
    // int cnt = 10;
    // while(cnt--)
    // {
    //     fwrite(msg, strlen(msg), 10, fp);
    // }

    // fclose(fp);
    // return 0;

    // FILE* fp = fopen("myfile", "r");
    // if(!fp) perror("fopen fail");

    // char buf[1024];
    // const char* msg = "hello\n";
    // while (1) {
    //   ssize_t s = fread(buf, 1, strlen(msg), fp);
    //   if (s > 0) {
    //     buf[s] = 0;
    //     printf("%s", buf);
    //   }
    //   if (feof(fp)) {
    //     break;
    //   }
    // }

    // fclose(fp);
    // return 0;


    //写文件
    // umask(0);
    // int fd = open("myfile", O_WRONLY | O_CREAT, 0644);
    // if(fd < 0)
    // {
    //     perror("open fail");
    //     return 1;
    // }

    // int count = 5;
    // const char* msg = "hello\n";
    // int len = strlen(msg);

    // while(count--)
    // {
    //     write(fd, msg, len);
    // }
    // close(fd);

    // return 0;

    // //读文件
    // int fd = open("myfile", O_RDONLY);
    // if (fd < 0) {
    //   perror("open");
    //   return 1;
    // }
    // const char *msg = "hello bit!\n";
    // char buf[1024];
    // while (1) {
    //   ssize_t s = read(fd, buf, strlen(msg)); //类⽐write
    //   if (s > 0) {
    //     printf("%s", buf);
    //   } else {
    //     break;
    //   }
    // }
    // close(fd);
    // return 0;

    // int fd = open("./log", O_CREAT | O_RDWR);
    // if (fd < 0) {
    //   perror("open");
    //   return 1;
    // }
    // close(1);
    // dup2(fd, 1);
    // for (;;) {
    //   char buf[1024] = {0};
    //   ssize_t read_size = read(0, buf, sizeof(buf) - 1);
    //   if (read_size < 0) {
    //     perror("read");
    //     break;
    //   }
    //   printf("%s", buf);
    //   fflush(stdout);
    // }

    // close(1);
    // int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
    // if (fd < 0) {
    //   perror("open");
    //   return 0;
    // }
    // printf("hello world: %d\n", fd);
    // close(fd);
    // return 0;

    close(1);
    int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
    if (fd < 0) {
      perror("open");
      return 0;
    }
    printf("hello world: %d\n", fd);
    fflush(stdout);
    close(fd);
    return 0;
}



